package com.etc.traval.daoimpl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.etc.traval.dao.PlaceDao;
import com.etc.traval.util.JDBCUtil;
import com.etc.travel.entity.Place;

public class PlaceDaoImpl implements PlaceDao {

	JDBCUtil util = new JDBCUtil();

	/**
	 * 根据id查找景点的方法
	 * 
	 * @author 刘一清
	 * @param 传入要查询的id
	 * @return 返回查找到的Place对象
	 * @since 2018年5月29日15时56分23秒
	 */
	@Override
	public Place queryPlaceById(int id) {
		ResultSet rs = util.query("select * from t_place where place_id=?", id);
		Place place = new Place();
		try {
			if (rs.next()) {
				place.setPlace_id(rs.getInt("place_id"));
				place.setPlace_name(rs.getString("place_name"));
				place.setPlace_logo(rs.getString("place_logo"));
				place.setPlace_content(rs.getString("place_content"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			util.closeAll();
		}
		return place;
	}

	/**
	 * 查询所有的景点
	 * 
	 * @author 刘一清
	 * @return 返回所有景点对象的集合
	 * @date 2018年5月29日16时01分45秒
	 */
	@Override
	public List<Place> queryAllPlace(int page, int size) {
		ResultSet rs = util.query(
				"select t.*,t.a from (select s.*,rownum as a  from (select * from t_place) s where rownum<=?) t where t.a>?",
				page * size, (page - 1) * size);
		List<Place> list = new ArrayList<Place>();
		try {
			while (rs.next()) {
				Place place = new Place();
				place.setPlace_id(rs.getInt("place_id"));
				place.setPlace_name(rs.getString("place_name"));
				place.setPlace_logo(rs.getString("place_logo"));
				place.setPlace_content(rs.getString("place_content"));
				list.add(place);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			util.closeAll();
		}
		return list;
	}

	/**
	 * 添加一个新景点
	 * 
	 * @author 刘一清
	 * @param 传入一个Place对象
	 * @return 返回Boolean值是否添加成功
	 * @date 2018年5月29日16时04分43秒
	 */
	@Override
	public boolean addPlace(Place place) {
		return util.update("insert into t_place (place_name,place_logo,place_content) values (?,?,?)",
				place.getPlace_name(), place.getPlace_logo(), place.getPlace_content()) > 0;
	}

	/**
	 * 根据id删除一个景点
	 * 
	 * @author 刘一清
	 * @param 传入要删除的景点id
	 * @return 返回是否删除成功
	 * @date 2018年5月29日16时09分54秒
	 */
	@Override
	public boolean deletePlaceById(int id) {
		return util.update("delete from t_place where place_id=?", id) > 0;
	}

	/**
	 * 根据id修改景点
	 * 
	 * @author 刘一清
	 * @param 传入要修改的景点id
	 * @return 返回是否修改成功
	 * @date 2018年5月29日16时12分34秒
	 */
	@Override
	public boolean updatePlaceById(Place place, int id) {
		return util.update("update t_place set place_content=?, place_name=? ,place_logo=? where place_id=?",
				place.getPlace_content(), place.getPlace_name(), place.getPlace_logo(), id) > 0;
	}

	/**
	 * 根据景点的地名查询景点的方法
	 * 
	 * @author 刘一清
	 * @param 传入景点名name
	 * @return 返回查询到的Place对象
	 * @date 2018年5月30日9时19分19秒
	 */
	@Override
	public List<Place> queryPlaceByName(String name, int page, int size) {
		ResultSet rs = util.query(
				"select t.*,t.a from (select s.*,rownum as a  from (select * from t_place where place_name=?) s where rownum<=?) t where t.a>?",
				name, page * size, (page - 1) * size);
		List<Place> list = new ArrayList<Place>();
		try {
			while (rs.next()) {
				Place place = new Place();
				place.setPlace_id(rs.getInt("place_id"));
				place.setPlace_name(rs.getString("place_name"));
				place.setPlace_logo(rs.getString("place_logo"));
				place.setPlace_content(rs.getString("place_content"));
				list.add(place);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			util.closeAll();
		}
		return list;
	}

	/**
	 * 根据地名模糊查询所有景点
	 * 
	 * @author 刘一清
	 * @param key
	 *            关键字
	 * @return place集合
	 * @date 2018年6月4日
	 */
	@Override
	public List<Place> queryAllByNameKey(String key) {
		ResultSet rs = util.query(
				"select * from t_place where place_name like ?",
				"%" + key + "%");
		List<Place> list = new ArrayList<Place>();
		try {
			while (rs.next()) {
				Place place = new Place();
				place.setPlace_id(rs.getInt("place_id"));
				place.setPlace_name(rs.getString("place_name"));
				place.setPlace_logo(rs.getString("place_logo"));
				place.setPlace_content(rs.getString("place_content"));
				list.add(place);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			util.closeAll();
		}
		return list;
	}

}
